package CountDownLatch_5;
import java.util.concurrent.CountDownLatch;
public class 基本用法_多线程任务等待 {
    public static void main(String[] args) throws InterruptedException {
        final int THREAD_COUNT = 10;
        final CountDownLatch startSignal = new CountDownLatch(1);
        final CountDownLatch doneSignal = new CountDownLatch(THREAD_COUNT);

        // 创建工作线程
        for (int i = 0; i < THREAD_COUNT; i++) {
            new Thread(new Runnable() {
                public void run() {
                    try {
                        System.out.println(Thread.currentThread().getName() + " 等待开始信号");
                        startSignal.await(); // 等待主线程的开始信号

                        System.out.println(Thread.currentThread().getName() + " 开始工作");
                        Thread.sleep((long)(Math.random() * 1000)); // 模拟工作时间

                        System.out.println(Thread.currentThread().getName() + " 工作完成");
                        doneSignal.countDown(); // 完成计数减一
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }, "工作线程-" + i).start();
        }

        System.out.println("主线程准备开始所有工作线程");
        Thread.sleep(1000); // 模拟主线程准备工作
        startSignal.countDown(); // 发出开始信号

        System.out.println("主线程等待所有工作线程完成");
        doneSignal.await(); // 等待所有工作线程完成

        System.out.println("所有工作线程已完成，主线程继续执行");
    }
}